@dxos/react-ui-editor 0.8.1-staging.391c573 → 0.8.1-staging.9eaf14f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/lib/browser/index.mjs +383 -255
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +415 -290
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +383 -255
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/InputMode.stories.d.ts +2 -2
  11. package/dist/types/src/TextEditor.stories.d.ts +5 -40
  12. package/dist/types/src/TextEditor.stories.d.ts.map +1 -1
  13. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  14. package/dist/types/src/defaults.d.ts +2 -0
  15. package/dist/types/src/defaults.d.ts.map +1 -1
  16. package/dist/types/src/extensions/command/command.d.ts +4 -2
  17. package/dist/types/src/extensions/command/command.d.ts.map +1 -1
  18. package/dist/types/src/extensions/command/hint.d.ts.map +1 -1
  19. package/dist/types/src/extensions/command/menu.d.ts +12 -0
  20. package/dist/types/src/extensions/command/menu.d.ts.map +1 -0
  21. package/dist/types/src/extensions/command/preview.d.ts +12 -0
  22. package/dist/types/src/extensions/command/preview.d.ts.map +1 -0
  23. package/dist/types/src/extensions/command/state.d.ts.map +1 -1
  24. package/dist/types/src/extensions/comments.d.ts +3 -3
  25. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  26. package/dist/types/src/extensions/factories.d.ts +2 -1
  27. package/dist/types/src/extensions/factories.d.ts.map +1 -1
  28. package/dist/types/src/extensions/folding.d.ts +2 -8
  29. package/dist/types/src/extensions/folding.d.ts.map +1 -1
  30. package/dist/types/src/extensions/selection.d.ts +6 -1
  31. package/dist/types/src/extensions/selection.d.ts.map +1 -1
  32. package/dist/types/src/{styles/stack-item-content-class-names.d.ts → fragments.d.ts} +1 -1
  33. package/dist/types/src/fragments.d.ts.map +1 -0
  34. package/dist/types/src/index.d.ts +0 -1
  35. package/dist/types/src/index.d.ts.map +1 -1
  36. package/dist/types/src/styles/theme.d.ts.map +1 -1
  37. package/package.json +27 -27
  38. package/src/InputMode.stories.tsx +4 -4
  39. package/src/TextEditor.stories.tsx +183 -61
  40. package/src/components/EditorToolbar/EditorToolbar.tsx +4 -5
  41. package/src/defaults.ts +12 -0
  42. package/src/extensions/command/command.ts +21 -2
  43. package/src/extensions/command/hint.ts +3 -0
  44. package/src/extensions/command/menu.ts +100 -0
  45. package/src/extensions/command/preview.ts +79 -0
  46. package/src/extensions/command/state.ts +9 -4
  47. package/src/extensions/comments.ts +6 -10
  48. package/src/extensions/factories.ts +4 -3
  49. package/src/extensions/folding.tsx +30 -73
  50. package/src/extensions/selection.ts +41 -21
  51. package/src/{styles/stack-item-content-class-names.ts → fragments.ts} +4 -2
  52. package/src/index.ts +0 -4
  53. package/src/styles/theme.ts +6 -1
  54. package/src/util/debug.ts +1 -1
  55. package/dist/types/src/styles/stack-item-content-class-names.d.ts.map +0 -1
@@ -35,14 +35,14 @@ var translations_default = [
35
35
 
36
36
  // packages/ui/react-ui-editor/src/index.ts
37
37
  import { EditorState as EditorState3 } from "@codemirror/state";
38
- import { EditorView as EditorView21, keymap as keymap11 } from "@codemirror/view";
38
+ import { EditorView as EditorView22, keymap as keymap11 } from "@codemirror/view";
39
39
  import { tags as tags2 } from "@lezer/highlight";
40
40
  import { TextKind } from "@dxos/protocols/proto/dxos/echo/model/text";
41
41
 
42
42
  // packages/ui/react-ui-editor/src/components/EditorToolbar/EditorToolbar.tsx
43
43
  import React, { useCallback } from "react";
44
44
  import { ElevationProvider } from "@dxos/react-ui";
45
- import { ToolbarMenu, MenuProvider, useMenuActions, createGapSeparator } from "@dxos/react-ui-menu";
45
+ import { MenuProvider, ToolbarMenu, createGapSeparator, useMenuActions } from "@dxos/react-ui-menu";
46
46
  import { textBlockWidth } from "@dxos/react-ui-theme";
47
47
 
48
48
  // packages/ui/react-ui-editor/src/components/EditorToolbar/util.ts
@@ -311,9 +311,8 @@ var createViewMode = (state) => {
311
311
  };
312
312
  };
313
313
 
314
- // packages/ui/react-ui-editor/src/styles/stack-item-content-class-names.ts
314
+ // packages/ui/react-ui-editor/src/fragments.ts
315
315
  import { mx } from "@dxos/react-ui-theme";
316
- var stackItemContentEditorClassNames = (role) => mx("dx-focus-ring-inset data-[toolbar=disabled]:pbs-2 attention-surface", role === "article" ? "min-bs-0" : "[&_.cm-scroller]:overflow-hidden [&_.cm-scroller]:min-bs-24");
317
316
  var stackItemContentToolbarClassNames = (role) => mx("attention-surface is-full border-be !border-separator", role === "section" && "sticky block-start-0 z-[1] -mbe-px min-is-0");
318
317
 
319
318
  // packages/ui/react-ui-editor/src/components/EditorToolbar/EditorToolbar.tsx
@@ -465,6 +464,10 @@ var defaultTheme = {
465
464
  background: "transparent"
466
465
  },
467
466
  ".cm-gutter": {},
467
+ ".cm-gutter.cm-lineNumbers": {
468
+ paddingRight: "4px",
469
+ borderRight: "1px solid var(--dx-separator)"
470
+ },
468
471
  ".cm-gutter.cm-lineNumbers .cm-gutterElement": {
469
472
  minWidth: "40px",
470
473
  alignContent: "center"
@@ -474,7 +477,7 @@ var defaultTheme = {
474
477
  */
475
478
  ".cm-gutterElement": {
476
479
  alignItems: "center",
477
- fontSize: "16px"
480
+ fontSize: "12px"
478
481
  },
479
482
  /**
480
483
  * Line.
@@ -520,6 +523,7 @@ var defaultTheme = {
520
523
  ".cm-link": {
521
524
  textDecorationLine: "underline",
522
525
  textDecorationThickness: "1px",
526
+ textDecorationColor: "var(--dx-separator)",
523
527
  textUnderlineOffset: "2px",
524
528
  borderRadius: ".125rem"
525
529
  },
@@ -648,6 +652,8 @@ var editorMonospace = EditorView.theme({
648
652
  }
649
653
  });
650
654
  var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
655
+ var stackItemContentEditorClassNames = (role) => mx3("attention-surface dx-focus-ring-inset data-[toolbar=disabled]:pbs-2", role === "section" ? "[&_.cm-scroller]:overflow-hidden [&_.cm-scroller]:min-bs-24" : "min-bs-0");
656
+ var stackItemContentToolbarClassNames2 = (role) => mx3("attention-surface is-full border-be !border-separator", role === "section" && "sticky block-start-0 z-[1] -mbe-px min-is-0");
651
657
 
652
658
  // packages/ui/react-ui-editor/src/extensions/annotations.ts
653
659
  import { StateField } from "@codemirror/state";
@@ -747,7 +753,7 @@ var logChanges = (trs) => {
747
753
  return changes2;
748
754
  }).filter(Boolean);
749
755
  if (changes.length) {
750
- log.info("changes", {
756
+ log("changes", {
751
757
  changes
752
758
  }, {
753
759
  F: __dxlog_file,
@@ -1852,7 +1858,7 @@ var random = (min, max) => {
1852
1858
  };
1853
1859
 
1854
1860
  // packages/ui/react-ui-editor/src/extensions/command/command.ts
1855
- import { EditorView as EditorView7, keymap as keymap3 } from "@codemirror/view";
1861
+ import { EditorView as EditorView8, keymap as keymap3 } from "@codemirror/view";
1856
1862
 
1857
1863
  // packages/ui/react-ui-editor/src/extensions/command/hint.ts
1858
1864
  import { RangeSetBuilder } from "@codemirror/state";
@@ -1888,18 +1894,19 @@ var commandState = StateField3.define({
1888
1894
  const widthWithoutPadding = parent.clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);
1889
1895
  dom.style.width = `${widthWithoutPadding}px`;
1890
1896
  }
1891
- options.onRender(dom, (action) => {
1897
+ options.onRenderDialog(dom, (action) => {
1892
1898
  view2.dispatch({
1893
1899
  effects: closeEffect.of(null)
1894
1900
  });
1895
1901
  if (action?.insert?.length) {
1902
+ const text = action.insert + "\n";
1896
1903
  view2.dispatch({
1897
1904
  changes: {
1898
1905
  from: pos,
1899
- insert: action.insert
1906
+ insert: text
1900
1907
  },
1901
1908
  selection: {
1902
- anchor: pos + action.insert.length
1909
+ anchor: pos + text.length
1903
1910
  }
1904
1911
  });
1905
1912
  }
@@ -2026,23 +2033,156 @@ var hintViewPlugin = ({ onHint }) => ViewPlugin3.fromClass(class {
2026
2033
  ]
2027
2034
  });
2028
2035
 
2036
+ // packages/ui/react-ui-editor/src/extensions/command/menu.ts
2037
+ import { ViewPlugin as ViewPlugin4 } from "@codemirror/view";
2038
+ var floatingMenu = (options) => ViewPlugin4.fromClass(class {
2039
+ constructor(view) {
2040
+ this.rafId = null;
2041
+ this.view = view;
2042
+ const container = view.scrollDOM;
2043
+ if (getComputedStyle(container).position === "static") {
2044
+ container.style.position = "relative";
2045
+ }
2046
+ this.button = document.createElement("div");
2047
+ this.button.style.position = "absolute";
2048
+ this.button.style.zIndex = "10";
2049
+ this.button.style.display = "none";
2050
+ options.onRenderMenu(this.button, () => {
2051
+ openCommand(view);
2052
+ });
2053
+ container.appendChild(this.button);
2054
+ container.addEventListener("scroll", this.scheduleUpdate);
2055
+ this.scheduleUpdate();
2056
+ }
2057
+ update(update2) {
2058
+ if (update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(openEffect)))) {
2059
+ this.button.style.display = "none";
2060
+ } else if (update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(closeEffect)))) {
2061
+ this.button.style.display = "block";
2062
+ } else if (update2.selectionSet || update2.viewportChanged || update2.docChanged || update2.geometryChanged) {
2063
+ this.scheduleUpdate();
2064
+ }
2065
+ }
2066
+ scheduleUpdate() {
2067
+ if (this.rafId != null) {
2068
+ cancelAnimationFrame(this.rafId);
2069
+ }
2070
+ this.rafId = requestAnimationFrame(() => this.updateButtonPosition());
2071
+ }
2072
+ updateButtonPosition() {
2073
+ const pos = this.view.state.selection.main.head;
2074
+ const lineBlock = this.view.lineBlockAt(pos);
2075
+ const domInfo = this.view.domAtPos(lineBlock.from);
2076
+ let node = domInfo.node;
2077
+ while (node && !(node instanceof HTMLElement)) {
2078
+ node = node.parentNode;
2079
+ }
2080
+ if (!node) {
2081
+ this.button.style.display = "none";
2082
+ return;
2083
+ }
2084
+ const lineRect = node.getBoundingClientRect();
2085
+ const containerRect = this.view.scrollDOM.getBoundingClientRect();
2086
+ const offsetTop = lineRect.top - containerRect.top + this.view.scrollDOM.scrollTop;
2087
+ const offsetLeft = this.view.scrollDOM.clientWidth + this.view.scrollDOM.scrollLeft - lineRect.x;
2088
+ this.button.style.top = `${offsetTop}px`;
2089
+ this.button.style.left = `${offsetLeft}px`;
2090
+ this.button.style.display = "block";
2091
+ }
2092
+ destroy() {
2093
+ this.button.remove();
2094
+ if (this.rafId != null) {
2095
+ cancelAnimationFrame(this.rafId);
2096
+ }
2097
+ }
2098
+ });
2099
+
2100
+ // packages/ui/react-ui-editor/src/extensions/command/preview.ts
2101
+ import { syntaxTree } from "@codemirror/language";
2102
+ import { RangeSetBuilder as RangeSetBuilder2, StateField as StateField4 } from "@codemirror/state";
2103
+ import { Decoration as Decoration4, EditorView as EditorView7, WidgetType as WidgetType3 } from "@codemirror/view";
2104
+ var preview = (options) => {
2105
+ return [
2106
+ StateField4.define({
2107
+ create: (state) => buildDecorations(state, options),
2108
+ update: (_, tr) => buildDecorations(tr.state, options),
2109
+ // TODO(burdon): Make atomic.
2110
+ provide: (field) => EditorView7.decorations.from(field)
2111
+ })
2112
+ ];
2113
+ };
2114
+ var buildDecorations = (state, options) => {
2115
+ const builder = new RangeSetBuilder2();
2116
+ syntaxTree(state).iterate({
2117
+ enter: (node) => {
2118
+ if (node.name === "Link") {
2119
+ const urlNode = node.node.getChild("URL");
2120
+ if (urlNode) {
2121
+ const text = state.sliceDoc(node.from + 1, urlNode.from - 2);
2122
+ const url = state.sliceDoc(urlNode.from, urlNode.to);
2123
+ builder.add(node.from, node.to, Decoration4.replace({
2124
+ block: true,
2125
+ widget: new PreviewWidget(options.onRenderPreview, url, text)
2126
+ }));
2127
+ }
2128
+ }
2129
+ }
2130
+ });
2131
+ return builder.finish();
2132
+ };
2133
+ var PreviewWidget = class extends WidgetType3 {
2134
+ constructor(_onRenderPreview, _url, _text) {
2135
+ super();
2136
+ this._onRenderPreview = _onRenderPreview;
2137
+ this._url = _url;
2138
+ this._text = _text;
2139
+ }
2140
+ eq(other) {
2141
+ return this._url === other._url;
2142
+ }
2143
+ toDOM(view) {
2144
+ const root = document.createElement("div");
2145
+ root.classList.add("cm-preview");
2146
+ this._onRenderPreview(root, {
2147
+ url: this._url,
2148
+ text: this._text
2149
+ });
2150
+ return root;
2151
+ }
2152
+ };
2153
+
2029
2154
  // packages/ui/react-ui-editor/src/extensions/command/command.ts
2030
2155
  var command = (options) => {
2031
2156
  return [
2032
2157
  commandConfig.of(options),
2033
2158
  commandState,
2034
2159
  keymap3.of(commandKeyBindings),
2160
+ preview(options),
2161
+ floatingMenu(options),
2035
2162
  hintViewPlugin(options),
2036
- EditorView7.focusChangeEffect.of((_, focusing) => {
2163
+ EditorView8.focusChangeEffect.of((_, focusing) => {
2037
2164
  return focusing ? closeEffect.of(null) : null;
2165
+ }),
2166
+ EditorView8.theme({
2167
+ ".cm-tooltip": {
2168
+ background: "transparent"
2169
+ },
2170
+ ".cm-preview": {
2171
+ marginLeft: "-1rem",
2172
+ marginRight: "-1rem",
2173
+ padding: "1rem",
2174
+ borderRadius: "1rem",
2175
+ background: "var(--dx-modalSurface)",
2176
+ border: "1px solid var(--dx-separator)"
2177
+ }
2038
2178
  })
2039
2179
  ];
2040
2180
  };
2041
2181
 
2042
2182
  // packages/ui/react-ui-editor/src/extensions/comments.ts
2043
2183
  import { invertedEffects } from "@codemirror/commands";
2044
- import { StateEffect as StateEffect3, StateField as StateField4 } from "@codemirror/state";
2045
- import { hoverTooltip, keymap as keymap5, Decoration as Decoration4, EditorView as EditorView9, ViewPlugin as ViewPlugin4 } from "@codemirror/view";
2184
+ import { StateEffect as StateEffect3, StateField as StateField5 } from "@codemirror/state";
2185
+ import { hoverTooltip, keymap as keymap5, Decoration as Decoration5, EditorView as EditorView10, ViewPlugin as ViewPlugin5 } from "@codemirror/view";
2046
2186
  import sortBy from "lodash.sortby";
2047
2187
  import { useEffect, useMemo as useMemo2 } from "react";
2048
2188
  import { debounce as debounce2 } from "@dxos/async";
@@ -2051,24 +2191,51 @@ import { isNonNullable } from "@dxos/util";
2051
2191
 
2052
2192
  // packages/ui/react-ui-editor/src/extensions/selection.ts
2053
2193
  import { Transaction } from "@codemirror/state";
2054
- import { EditorView as EditorView8, keymap as keymap4 } from "@codemirror/view";
2194
+ import { EditorView as EditorView9, keymap as keymap4 } from "@codemirror/view";
2055
2195
  import { debounce } from "@dxos/async";
2196
+ import { invariant as invariant3 } from "@dxos/invariant";
2197
+ import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
2198
+ var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/selection.ts";
2056
2199
  var documentId = singleValueFacet();
2057
2200
  var stateRestoreAnnotation = "dxos.org/cm/state-restore";
2058
2201
  var createEditorStateTransaction = ({ scrollTo, selection }) => {
2059
2202
  return {
2060
2203
  selection,
2061
2204
  scrollIntoView: !scrollTo,
2062
- effects: scrollTo ? EditorView8.scrollIntoView(scrollTo, {
2205
+ effects: scrollTo ? EditorView9.scrollIntoView(scrollTo, {
2063
2206
  yMargin: 96
2064
2207
  }) : void 0,
2065
2208
  annotations: Transaction.userEvent.of(stateRestoreAnnotation)
2066
2209
  };
2067
2210
  };
2068
- var selectionState = (state = {}) => {
2069
- const setState = (id, selectionState2) => {
2070
- state[id] = selectionState2;
2071
- };
2211
+ var createEditorStateStore = (keyPrefix) => ({
2212
+ getState: (id) => {
2213
+ invariant3(id, void 0, {
2214
+ F: __dxlog_file6,
2215
+ L: 47,
2216
+ S: void 0,
2217
+ A: [
2218
+ "id",
2219
+ ""
2220
+ ]
2221
+ });
2222
+ const state = localStorage.getItem(`${keyPrefix}/${id}`);
2223
+ return state ? JSON.parse(state) : void 0;
2224
+ },
2225
+ setState: (id, state) => {
2226
+ invariant3(id, void 0, {
2227
+ F: __dxlog_file6,
2228
+ L: 53,
2229
+ S: void 0,
2230
+ A: [
2231
+ "id",
2232
+ ""
2233
+ ]
2234
+ });
2235
+ localStorage.setItem(`${keyPrefix}/${id}`, JSON.stringify(state));
2236
+ }
2237
+ });
2238
+ var selectionState = ({ getState, setState } = {}) => {
2072
2239
  const setStateDebounced = debounce(setState, 1e3);
2073
2240
  return [
2074
2241
  // TODO(burdon): Track scrolling (currently only updates when cursor moves).
@@ -2077,48 +2244,50 @@ var selectionState = (state = {}) => {
2077
2244
  // setStateDebounced(id, {});
2078
2245
  // },
2079
2246
  // }),
2080
- EditorView8.updateListener.of(({ view, transactions }) => {
2247
+ EditorView9.updateListener.of(({ view, transactions }) => {
2081
2248
  const id = view.state.facet(documentId);
2082
2249
  if (!id || transactions.some((tr) => tr.isUserEvent(stateRestoreAnnotation))) {
2083
2250
  return;
2084
2251
  }
2085
- const { scrollTop } = view.scrollDOM;
2086
- const pos = view.posAtCoords({
2087
- x: 0,
2088
- y: scrollTop
2089
- });
2090
- if (pos !== null) {
2091
- const { anchor, head } = view.state.selection.main;
2092
- setStateDebounced(id, {
2093
- scrollTo: pos,
2094
- selection: {
2095
- anchor,
2096
- head
2097
- }
2252
+ if (setState) {
2253
+ const { scrollTop } = view.scrollDOM;
2254
+ const pos = view.posAtCoords({
2255
+ x: 0,
2256
+ y: scrollTop
2098
2257
  });
2258
+ if (pos !== null) {
2259
+ const { anchor, head } = view.state.selection.main;
2260
+ setStateDebounced(id, {
2261
+ scrollTo: pos,
2262
+ selection: {
2263
+ anchor,
2264
+ head
2265
+ }
2266
+ });
2267
+ }
2099
2268
  }
2100
2269
  }),
2101
- keymap4.of([
2270
+ getState && keymap4.of([
2102
2271
  {
2103
2272
  key: "ctrl-r",
2104
2273
  run: (view) => {
2105
- const selection = state[view.state.facet(documentId)];
2106
- if (selection) {
2107
- view.dispatch(createEditorStateTransaction(selection));
2274
+ const state = getState(view.state.facet(documentId));
2275
+ if (state) {
2276
+ view.dispatch(createEditorStateTransaction(state));
2108
2277
  }
2109
2278
  return true;
2110
2279
  }
2111
2280
  }
2112
2281
  ])
2113
- ];
2282
+ ].filter(isNotFalsy2);
2114
2283
  };
2115
2284
 
2116
2285
  // packages/ui/react-ui-editor/src/extensions/comments.ts
2117
- var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/comments.ts";
2286
+ var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/comments.ts";
2118
2287
  var setComments = StateEffect3.define();
2119
2288
  var setSelection = StateEffect3.define();
2120
2289
  var setCommentState = StateEffect3.define();
2121
- var commentsState = StateField4.define({
2290
+ var commentsState = StateField5.define({
2122
2291
  create: (state) => ({
2123
2292
  id: state.facet(documentId),
2124
2293
  comments: [],
@@ -2156,7 +2325,7 @@ var commentsState = StateField4.define({
2156
2325
  return value;
2157
2326
  }
2158
2327
  });
2159
- var styles3 = EditorView9.theme({
2328
+ var styles3 = EditorView10.theme({
2160
2329
  ".cm-comment, .cm-comment-current": {
2161
2330
  margin: "0 -3px",
2162
2331
  padding: "3px",
@@ -2169,14 +2338,14 @@ var styles3 = EditorView9.theme({
2169
2338
  textDecoration: "underline"
2170
2339
  }
2171
2340
  });
2172
- var createCommentMark = (id, isCurrent) => Decoration4.mark({
2341
+ var createCommentMark = (id, isCurrent) => Decoration5.mark({
2173
2342
  class: isCurrent ? "cm-comment-current" : "cm-comment",
2174
2343
  attributes: {
2175
2344
  "data-testid": "cm-comment",
2176
2345
  "data-comment-id": id
2177
2346
  }
2178
2347
  });
2179
- var commentsDecorations = EditorView9.decorations.compute([
2348
+ var commentsDecorations = EditorView10.decorations.compute([
2180
2349
  commentsState
2181
2350
  ], (state) => {
2182
2351
  const { selection: { current }, comments: comments2 } = state.field(commentsState);
@@ -2184,7 +2353,7 @@ var commentsDecorations = EditorView9.decorations.compute([
2184
2353
  const range = comment.range;
2185
2354
  if (!range) {
2186
2355
  log4.warn("Invalid range:", range, {
2187
- F: __dxlog_file6,
2356
+ F: __dxlog_file7,
2188
2357
  L: 144,
2189
2358
  S: void 0,
2190
2359
  C: (f, a) => f(...a)
@@ -2196,10 +2365,10 @@ var commentsDecorations = EditorView9.decorations.compute([
2196
2365
  const mark = createCommentMark(comment.comment.id, comment.comment.id === current);
2197
2366
  return mark.range(range.from, range.to);
2198
2367
  }).filter(isNonNullable);
2199
- return Decoration4.set(decorations);
2368
+ return Decoration5.set(decorations);
2200
2369
  });
2201
2370
  var commentClickedEffect = StateEffect3.define();
2202
- var handleCommentClick = EditorView9.domEventHandlers({
2371
+ var handleCommentClick = EditorView10.domEventHandlers({
2203
2372
  click: (event, view) => {
2204
2373
  let target = event.target;
2205
2374
  const editorRoot = view.dom;
@@ -2238,7 +2407,7 @@ var trackPastedComments = (onUpdate) => {
2238
2407
  }
2239
2408
  };
2240
2409
  return [
2241
- EditorView9.domEventHandlers({
2410
+ EditorView10.domEventHandlers({
2242
2411
  cut: handleTrack,
2243
2412
  copy: handleTrack
2244
2413
  }),
@@ -2260,7 +2429,7 @@ var trackPastedComments = (onUpdate) => {
2260
2429
  return effects;
2261
2430
  }),
2262
2431
  // Handle paste or the undo of comment deletion.
2263
- EditorView9.updateListener.of((update2) => {
2432
+ EditorView10.updateListener.of((update2) => {
2264
2433
  const restore = [];
2265
2434
  for (let i = 0; i < update2.transactions.length; i++) {
2266
2435
  const tr = update2.transactions[i];
@@ -2400,7 +2569,7 @@ var comments = (options = {}) => {
2400
2569
  //
2401
2570
  // Track deleted ranges and update ranges for decorations.
2402
2571
  //
2403
- EditorView9.updateListener.of(({ view, state, changes }) => {
2572
+ EditorView10.updateListener.of(({ view, state, changes }) => {
2404
2573
  let mod = false;
2405
2574
  const { comments: comments2, ...value } = state.field(commentsState);
2406
2575
  changes.iterChanges((from, to, from2, to2) => {
@@ -2432,7 +2601,7 @@ var comments = (options = {}) => {
2432
2601
  //
2433
2602
  // Track selection/proximity.
2434
2603
  //
2435
- EditorView9.updateListener.of(({ view, state }) => {
2604
+ EditorView10.updateListener.of(({ view, state }) => {
2436
2605
  let min = Infinity;
2437
2606
  const { selection: { current, closest }, comments: comments2 } = state.field(commentsState);
2438
2607
  const { head } = state.selection.main;
@@ -2486,7 +2655,7 @@ var scrollThreadIntoView = (view, id, center = true) => {
2486
2655
  anchor: range.from
2487
2656
  } : void 0,
2488
2657
  effects: [
2489
- needsScroll ? EditorView9.scrollIntoView(range.from, center ? {
2658
+ needsScroll ? EditorView10.scrollIntoView(range.from, center ? {
2490
2659
  y: "center"
2491
2660
  } : void 0) : [],
2492
2661
  needsSelectionUpdate ? setSelection.of({
@@ -2532,13 +2701,13 @@ var ExternalCommentSync = class {
2532
2701
  this.unsubscribe = subscribe(updateComments);
2533
2702
  }
2534
2703
  };
2535
- var createExternalCommentSync = (id, subscribe, getComments) => ViewPlugin4.fromClass(class {
2704
+ var createExternalCommentSync = (id, subscribe, getComments) => ViewPlugin5.fromClass(class {
2536
2705
  constructor(view) {
2537
2706
  return new ExternalCommentSync(view, id, subscribe, getComments);
2538
2707
  }
2539
2708
  });
2540
2709
  var useCommentState = (state) => {
2541
- return useMemo2(() => EditorView9.updateListener.of((update2) => {
2710
+ return useMemo2(() => EditorView10.updateListener.of((update2) => {
2542
2711
  if (update2.docChanged || update2.selectionSet) {
2543
2712
  state.comment = selectionOverlapsComment(update2.state);
2544
2713
  state.selection = hasActiveSelection(update2.state);
@@ -2562,7 +2731,7 @@ var useComments = (view, id, comments2) => {
2562
2731
  });
2563
2732
  };
2564
2733
  var useCommentClickListener = (onCommentClick) => {
2565
- return useMemo2(() => EditorView9.updateListener.of((update2) => {
2734
+ return useMemo2(() => EditorView10.updateListener.of((update2) => {
2566
2735
  update2.transactions.forEach((transaction) => {
2567
2736
  transaction.effects.forEach((effect) => {
2568
2737
  if (effect.is(commentClickedEffect)) {
@@ -2576,21 +2745,21 @@ var useCommentClickListener = (onCommentClick) => {
2576
2745
  };
2577
2746
 
2578
2747
  // packages/ui/react-ui-editor/src/extensions/debug.ts
2579
- import { syntaxTree } from "@codemirror/language";
2580
- import { StateField as StateField5 } from "@codemirror/state";
2748
+ import { syntaxTree as syntaxTree2 } from "@codemirror/language";
2749
+ import { StateField as StateField6 } from "@codemirror/state";
2581
2750
  var debugNodeLogger = (log8 = console.log) => {
2582
- const logTokens = (state) => syntaxTree(state).iterate({
2751
+ const logTokens = (state) => syntaxTree2(state).iterate({
2583
2752
  enter: (node) => log8(node.type)
2584
2753
  });
2585
- return StateField5.define({
2754
+ return StateField6.define({
2586
2755
  create: (state) => logTokens(state),
2587
2756
  update: (_, tr) => logTokens(tr.state)
2588
2757
  });
2589
2758
  };
2590
2759
 
2591
2760
  // packages/ui/react-ui-editor/src/extensions/dnd.ts
2592
- import { dropCursor, EditorView as EditorView10 } from "@codemirror/view";
2593
- var styles4 = EditorView10.theme({
2761
+ import { dropCursor, EditorView as EditorView11 } from "@codemirror/view";
2762
+ var styles4 = EditorView11.theme({
2594
2763
  ".cm-dropCursor": {
2595
2764
  borderLeft: "2px solid var(--dx-accentText)",
2596
2765
  color: "var(--dx-accentText)",
@@ -2604,7 +2773,7 @@ var dropFile = (options = {}) => {
2604
2773
  return [
2605
2774
  styles4,
2606
2775
  dropCursor(),
2607
- EditorView10.domEventHandlers({
2776
+ EditorView11.domEventHandlers({
2608
2777
  drop: (event, view) => {
2609
2778
  event.preventDefault();
2610
2779
  const files = event.dataTransfer?.files;
@@ -2631,18 +2800,18 @@ import { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from "@cod
2631
2800
  import { searchKeymap } from "@codemirror/search";
2632
2801
  import { EditorState } from "@codemirror/state";
2633
2802
  import { oneDarkHighlightStyle } from "@codemirror/theme-one-dark";
2634
- import { EditorView as EditorView12, drawSelection, dropCursor as dropCursor2, highlightActiveLine, keymap as keymap6, lineNumbers, placeholder, scrollPastEnd } from "@codemirror/view";
2803
+ import { EditorView as EditorView13, drawSelection, dropCursor as dropCursor2, highlightActiveLine, keymap as keymap6, lineNumbers, placeholder, scrollPastEnd } from "@codemirror/view";
2635
2804
  import defaultsDeep2 from "lodash.defaultsdeep";
2636
2805
  import merge from "lodash.merge";
2637
2806
  import { generateName } from "@dxos/display-name";
2638
2807
  import { log as log5 } from "@dxos/log";
2639
- import { hexToHue, isNotFalsy as isNotFalsy2 } from "@dxos/util";
2808
+ import { hexToHue, isNotFalsy as isNotFalsy3 } from "@dxos/util";
2640
2809
 
2641
2810
  // packages/ui/react-ui-editor/src/extensions/focus.ts
2642
- import { StateEffect as StateEffect4, StateField as StateField6 } from "@codemirror/state";
2643
- import { EditorView as EditorView11 } from "@codemirror/view";
2811
+ import { StateEffect as StateEffect4, StateField as StateField7 } from "@codemirror/state";
2812
+ import { EditorView as EditorView12 } from "@codemirror/view";
2644
2813
  var focusEffect = StateEffect4.define();
2645
- var focusField = StateField6.define({
2814
+ var focusField = StateField7.define({
2646
2815
  create: () => false,
2647
2816
  update: (value, tr) => {
2648
2817
  for (const effect of tr.effects) {
@@ -2655,7 +2824,7 @@ var focusField = StateField6.define({
2655
2824
  });
2656
2825
  var focus = [
2657
2826
  focusField,
2658
- EditorView11.domEventHandlers({
2827
+ EditorView12.domEventHandlers({
2659
2828
  focus: (event, view) => {
2660
2829
  setTimeout(() => view.dispatch({
2661
2830
  effects: focusEffect.of(true)
@@ -2670,14 +2839,13 @@ var focus = [
2670
2839
  ];
2671
2840
 
2672
2841
  // packages/ui/react-ui-editor/src/extensions/factories.ts
2673
- var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/factories.ts";
2842
+ var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/factories.ts";
2674
2843
  var preventNewline = EditorState.transactionFilter.of((tr) => tr.newDoc.lines > 1 ? [] : tr);
2675
2844
  var defaultBasicOptions = {
2676
2845
  allowMultipleSelections: true,
2677
2846
  bracketMatching: true,
2678
2847
  closeBrackets: true,
2679
2848
  drawSelection: true,
2680
- editable: true,
2681
2849
  focus: true,
2682
2850
  history: true,
2683
2851
  keymap: "standard",
@@ -2694,9 +2862,9 @@ var createBasicExtensions = (_props) => {
2694
2862
  const props = defaultsDeep2({}, _props, defaultBasicOptions);
2695
2863
  return [
2696
2864
  // NOTE: Doesn't catch errors in keymap functions.
2697
- EditorView12.exceptionSink.of((err) => {
2865
+ EditorView13.exceptionSink.of((err) => {
2698
2866
  log5.catch(err, void 0, {
2699
- F: __dxlog_file7,
2867
+ F: __dxlog_file8,
2700
2868
  L: 96,
2701
2869
  S: void 0,
2702
2870
  C: (f, a) => f(...a)
@@ -2709,16 +2877,14 @@ var createBasicExtensions = (_props) => {
2709
2877
  props.drawSelection && drawSelection({
2710
2878
  cursorBlinkRate: 1200
2711
2879
  }),
2880
+ props.editable !== void 0 && EditorView13.editable.of(props.editable),
2712
2881
  props.focus && focus,
2713
2882
  props.highlightActiveLine && highlightActiveLine(),
2714
2883
  props.history && history(),
2715
2884
  props.lineNumbers && lineNumbers(),
2716
- props.lineWrapping && EditorView12.lineWrapping,
2885
+ props.lineWrapping && EditorView13.lineWrapping,
2717
2886
  props.placeholder && placeholder(props.placeholder),
2718
- props.readonly && [
2719
- EditorState.readOnly.of(true),
2720
- EditorView12.editable.of(false)
2721
- ],
2887
+ props.readOnly !== void 0 && EditorState.readOnly.of(props.readOnly),
2722
2888
  props.scrollPastEnd && scrollPastEnd(),
2723
2889
  props.tabSize && EditorState.tabSize.of(props.tabSize),
2724
2890
  // https://codemirror.net/docs/ref/#view.KeyBinding
@@ -2742,8 +2908,8 @@ var createBasicExtensions = (_props) => {
2742
2908
  preventDefault: true,
2743
2909
  run: () => true
2744
2910
  }
2745
- ].filter(isNotFalsy2))
2746
- ].filter(isNotFalsy2);
2911
+ ].filter(isNotFalsy3))
2912
+ ].filter(isNotFalsy3);
2747
2913
  };
2748
2914
  var defaultThemeSlots = {
2749
2915
  editor: {
@@ -2753,17 +2919,17 @@ var defaultThemeSlots = {
2753
2919
  var createThemeExtensions = ({ themeMode, styles: styles5, syntaxHighlighting: _syntaxHighlighting, slots: _slots } = {}) => {
2754
2920
  const slots = defaultsDeep2({}, _slots, defaultThemeSlots);
2755
2921
  return [
2756
- EditorView12.darkTheme.of(themeMode === "dark"),
2757
- EditorView12.baseTheme(styles5 ? merge({}, defaultTheme, styles5) : defaultTheme),
2922
+ EditorView13.darkTheme.of(themeMode === "dark"),
2923
+ EditorView13.baseTheme(styles5 ? merge({}, defaultTheme, styles5) : defaultTheme),
2758
2924
  // https://github.com/codemirror/theme-one-dark
2759
2925
  _syntaxHighlighting && (themeMode === "dark" ? syntaxHighlighting(oneDarkHighlightStyle) : syntaxHighlighting(defaultHighlightStyle)),
2760
- slots.editor?.className && EditorView12.editorAttributes.of({
2926
+ slots.editor?.className && EditorView13.editorAttributes.of({
2761
2927
  class: slots.editor.className
2762
2928
  }),
2763
- slots.content?.className && EditorView12.contentAttributes.of({
2929
+ slots.content?.className && EditorView13.contentAttributes.of({
2764
2930
  class: slots.content.className
2765
2931
  })
2766
- ].filter(isNotFalsy2);
2932
+ ].filter(isNotFalsy3);
2767
2933
  };
2768
2934
  var createDataExtensions = ({ id, text, space, identity }) => {
2769
2935
  const extensions = [];
@@ -2788,91 +2954,52 @@ var createDataExtensions = ({ id, text, space, identity }) => {
2788
2954
  };
2789
2955
 
2790
2956
  // packages/ui/react-ui-editor/src/extensions/folding.tsx
2791
- import { codeFolding, foldGutter, foldedRanges, foldEffect } from "@codemirror/language";
2792
- import { EditorView as EditorView13 } from "@codemirror/view";
2957
+ import { codeFolding, foldGutter } from "@codemirror/language";
2958
+ import { EditorView as EditorView14 } from "@codemirror/view";
2793
2959
  import React3 from "react";
2794
- import { debounce as debounce3 } from "@dxos/async";
2795
2960
  import { Icon } from "@dxos/react-ui";
2796
- var folding = (state = {}) => {
2797
- const setState = (id, foldState) => {
2798
- state[id] = foldState;
2799
- };
2800
- const setStateDebounced = debounce3(setState, 1e3);
2801
- let initialized = false;
2802
- return [
2803
- codeFolding({
2804
- placeholderDOM: () => {
2805
- return document.createElement("span");
2806
- }
2807
- }),
2808
- foldGutter({
2809
- markerDOM: (open) => {
2810
- const el = createElement("div", {
2811
- className: "flex h-full items-center"
2812
- });
2813
- return renderRoot(el, /* @__PURE__ */ React3.createElement(Icon, {
2814
- icon: "ph--caret-right--regular",
2815
- size: 3,
2816
- classNames: [
2817
- "mx-3 cursor-pointer",
2818
- open && "rotate-90"
2819
- ]
2820
- }));
2821
- }
2822
- }),
2823
- EditorView13.theme({
2824
- ".cm-foldGutter": {
2825
- opacity: 0.3,
2826
- transition: "opacity 0.3s",
2827
- width: "32px"
2828
- },
2829
- ".cm-foldGutter:hover": {
2830
- opacity: 1
2831
- }
2832
- }),
2833
- EditorView13.updateListener.of(({ view }) => {
2834
- const id = view.state.facet(documentId);
2835
- if (!id) {
2836
- return;
2837
- }
2838
- if (!initialized) {
2839
- initialized = true;
2840
- const foldState2 = state[id];
2841
- if (foldState2?.foldedRanges?.length) {
2842
- view.dispatch({
2843
- effects: foldState2.foldedRanges.map((range) => foldEffect.of({
2844
- from: range.from,
2845
- to: range.to
2846
- }))
2847
- });
2848
- }
2849
- return;
2850
- }
2851
- const decorations = foldedRanges(view.state);
2852
- const ranges = [];
2853
- decorations.between(0, view.state.doc.length, (from, to) => {
2854
- ranges.push({
2855
- from,
2856
- to
2857
- });
2961
+ var folding = (_props = {}) => [
2962
+ codeFolding({
2963
+ placeholderDOM: () => {
2964
+ return document.createElement("span");
2965
+ }
2966
+ }),
2967
+ foldGutter({
2968
+ markerDOM: (open) => {
2969
+ const el = createElement("div", {
2970
+ className: "flex h-full items-center"
2858
2971
  });
2859
- const foldState = {
2860
- foldedRanges: ranges
2861
- };
2862
- setStateDebounced?.(id, foldState);
2863
- })
2864
- ];
2865
- };
2972
+ return renderRoot(el, /* @__PURE__ */ React3.createElement(Icon, {
2973
+ icon: "ph--caret-right--regular",
2974
+ size: 3,
2975
+ classNames: [
2976
+ "mx-3 cursor-pointer",
2977
+ open && "rotate-90"
2978
+ ]
2979
+ }));
2980
+ }
2981
+ }),
2982
+ EditorView14.theme({
2983
+ ".cm-foldGutter": {
2984
+ opacity: 0.3,
2985
+ transition: "opacity 0.3s",
2986
+ width: "32px"
2987
+ },
2988
+ ".cm-foldGutter:hover": {
2989
+ opacity: 1
2990
+ }
2991
+ })
2992
+ ];
2866
2993
 
2867
2994
  // packages/ui/react-ui-editor/src/extensions/listener.ts
2868
- import { EditorView as EditorView14 } from "@codemirror/view";
2995
+ import { EditorView as EditorView15 } from "@codemirror/view";
2869
2996
  var listener = ({ onFocus, onChange }) => {
2870
2997
  const extensions = [];
2871
- onFocus && extensions.push(EditorView14.focusChangeEffect.of((_, focusing) => {
2998
+ onFocus && extensions.push(EditorView15.focusChangeEffect.of((_, focusing) => {
2872
2999
  onFocus(focusing);
2873
3000
  return null;
2874
3001
  }));
2875
- onChange && extensions.push(EditorView14.updateListener.of((update2) => {
3002
+ onChange && extensions.push(EditorView15.updateListener.of((update2) => {
2876
3003
  onChange(update2.state.doc.toString(), update2.state.facet(documentId));
2877
3004
  }));
2878
3005
  return extensions;
@@ -2880,9 +3007,9 @@ var listener = ({ onFocus, onChange }) => {
2880
3007
 
2881
3008
  // packages/ui/react-ui-editor/src/extensions/markdown/formatting.ts
2882
3009
  import { snippet } from "@codemirror/autocomplete";
2883
- import { syntaxTree as syntaxTree2 } from "@codemirror/language";
3010
+ import { syntaxTree as syntaxTree3 } from "@codemirror/language";
2884
3011
  import { EditorSelection } from "@codemirror/state";
2885
- import { EditorView as EditorView15, keymap as keymap7 } from "@codemirror/view";
3012
+ import { EditorView as EditorView16, keymap as keymap7 } from "@codemirror/view";
2886
3013
  import { useMemo as useMemo3 } from "react";
2887
3014
  var formattingEquals = (a, b) => a.blockType === b.blockType && a.strong === b.strong && a.emphasis === b.emphasis && a.strikethrough === b.strikethrough && a.code === b.code && a.link === b.link && a.listStyle === b.listStyle && a.blockQuote === b.blockQuote;
2888
3015
  var Inline;
@@ -2905,7 +3032,7 @@ var setHeading = (level) => {
2905
3032
  let prevBlock = -1;
2906
3033
  for (const range of ranges) {
2907
3034
  let sawBlock = false;
2908
- syntaxTree2(state).iterate({
3035
+ syntaxTree3(state).iterate({
2909
3036
  from: range.from,
2910
3037
  to: range.to,
2911
3038
  enter: (node) => {
@@ -3014,7 +3141,7 @@ var setStyle = (type, enable) => {
3014
3141
  let startCovered = false;
3015
3142
  let endCovered = false;
3016
3143
  let { from, to } = range;
3017
- syntaxTree2(state).iterate({
3144
+ syntaxTree3(state).iterate({
3018
3145
  from,
3019
3146
  to,
3020
3147
  enter: (node) => {
@@ -3217,7 +3344,7 @@ var insertTable = (view) => {
3217
3344
  snippets.table(view, null, from, from);
3218
3345
  };
3219
3346
  var removeLinkInner = (from, to, changes, state) => {
3220
- syntaxTree2(state).iterate({
3347
+ syntaxTree3(state).iterate({
3221
3348
  from,
3222
3349
  to,
3223
3350
  enter: (node) => {
@@ -3262,7 +3389,7 @@ var addLink = ({ url, image: image2 } = {}) => {
3262
3389
  let { from, to } = range;
3263
3390
  const cutStyles = [];
3264
3391
  let okay = null;
3265
- syntaxTree2(state).iterate({
3392
+ syntaxTree3(state).iterate({
3266
3393
  from,
3267
3394
  to,
3268
3395
  enter: (node) => {
@@ -3357,7 +3484,7 @@ var addList = (type) => {
3357
3484
  let parentColumn = null;
3358
3485
  const blocks = [];
3359
3486
  for (const { from, to } of state.selection.ranges) {
3360
- syntaxTree2(state).iterate({
3487
+ syntaxTree3(state).iterate({
3361
3488
  from,
3362
3489
  to,
3363
3490
  enter: (node) => {
@@ -3492,7 +3619,7 @@ var removeList = (type) => {
3492
3619
  const stack = [];
3493
3620
  const targetNodeType = type === 0 ? "OrderedList" : type === 1 ? "BulletList" : "TaskList";
3494
3621
  for (const { from, to } of state.selection.ranges) {
3495
- syntaxTree2(state).iterate({
3622
+ syntaxTree3(state).iterate({
3496
3623
  from,
3497
3624
  to,
3498
3625
  enter: (node) => {
@@ -3579,7 +3706,7 @@ var setBlockquote = (enable) => {
3579
3706
  let lastBlock = -1;
3580
3707
  for (const { from, to } of state.selection.ranges) {
3581
3708
  const sawBlock = false;
3582
- syntaxTree2(state).iterate({
3709
+ syntaxTree3(state).iterate({
3583
3710
  from,
3584
3711
  to,
3585
3712
  enter: (node) => {
@@ -3669,7 +3796,7 @@ var addCodeblock = (target) => {
3669
3796
  for (const { from, to } of selection.ranges) {
3670
3797
  let blockFrom = from;
3671
3798
  let blockTo = to;
3672
- syntaxTree2(state).iterate({
3799
+ syntaxTree3(state).iterate({
3673
3800
  from,
3674
3801
  to,
3675
3802
  enter: (node) => {
@@ -3720,7 +3847,7 @@ var removeCodeblock = ({ state, dispatch }) => {
3720
3847
  let lastBlock = -1;
3721
3848
  const changes = [];
3722
3849
  for (const { from, to } of state.selection.ranges) {
3723
- syntaxTree2(state).iterate({
3850
+ syntaxTree3(state).iterate({
3724
3851
  from,
3725
3852
  to,
3726
3853
  enter: (node) => {
@@ -3882,7 +4009,7 @@ var getFormatting = (state) => {
3882
4009
  }
3883
4010
  }
3884
4011
  }
3885
- syntaxTree2(state).iterate({
4012
+ syntaxTree3(state).iterate({
3886
4013
  from: range.from,
3887
4014
  to: range.to,
3888
4015
  enter: (node) => {
@@ -3971,7 +4098,7 @@ var getFormatting = (state) => {
3971
4098
  };
3972
4099
  };
3973
4100
  var useFormattingState = (state) => {
3974
- return useMemo3(() => EditorView15.updateListener.of((update2) => {
4101
+ return useMemo3(() => EditorView16.updateListener.of((update2) => {
3975
4102
  if (update2.docChanged || update2.selectionSet) {
3976
4103
  Object.entries(getFormatting(update2.state)).forEach(([key, active]) => {
3977
4104
  state[key] = active;
@@ -4254,9 +4381,9 @@ var createMarkdownExtensions = ({ themeMode } = {}) => {
4254
4381
  };
4255
4382
 
4256
4383
  // packages/ui/react-ui-editor/src/extensions/markdown/debug.ts
4257
- import { syntaxTree as syntaxTree3 } from "@codemirror/language";
4258
- import { StateField as StateField7 } from "@codemirror/state";
4259
- var debugTree = (cb) => StateField7.define({
4384
+ import { syntaxTree as syntaxTree4 } from "@codemirror/language";
4385
+ import { StateField as StateField8 } from "@codemirror/state";
4386
+ var debugTree = (cb) => StateField8.define({
4260
4387
  create: (state) => cb(convertTreeToJson(state)),
4261
4388
  update: (value, tr) => cb(convertTreeToJson(tr.state))
4262
4389
  });
@@ -4277,24 +4404,24 @@ var convertTreeToJson = (state) => {
4277
4404
  }
4278
4405
  return node;
4279
4406
  };
4280
- return treeToJson(syntaxTree3(state).cursor());
4407
+ return treeToJson(syntaxTree4(state).cursor());
4281
4408
  };
4282
4409
 
4283
4410
  // packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts
4284
- import { syntaxTree as syntaxTree7 } from "@codemirror/language";
4285
- import { RangeSetBuilder as RangeSetBuilder3, StateEffect as StateEffect5 } from "@codemirror/state";
4286
- import { EditorView as EditorView19, Decoration as Decoration7, WidgetType as WidgetType5, ViewPlugin as ViewPlugin6 } from "@codemirror/view";
4287
- import { invariant as invariant3 } from "@dxos/invariant";
4411
+ import { syntaxTree as syntaxTree8 } from "@codemirror/language";
4412
+ import { RangeSetBuilder as RangeSetBuilder4, StateEffect as StateEffect5 } from "@codemirror/state";
4413
+ import { EditorView as EditorView20, Decoration as Decoration8, WidgetType as WidgetType6, ViewPlugin as ViewPlugin7 } from "@codemirror/view";
4414
+ import { invariant as invariant4 } from "@dxos/invariant";
4288
4415
  import { mx as mx4 } from "@dxos/react-ui-theme";
4289
4416
 
4290
4417
  // packages/ui/react-ui-editor/src/extensions/markdown/changes.ts
4291
- import { syntaxTree as syntaxTree4 } from "@codemirror/language";
4418
+ import { syntaxTree as syntaxTree5 } from "@codemirror/language";
4292
4419
  import { Transaction as Transaction2 } from "@codemirror/state";
4293
- import { ViewPlugin as ViewPlugin5 } from "@codemirror/view";
4420
+ import { ViewPlugin as ViewPlugin6 } from "@codemirror/view";
4294
4421
  var adjustChanges = () => {
4295
- return ViewPlugin5.fromClass(class {
4422
+ return ViewPlugin6.fromClass(class {
4296
4423
  update(update2) {
4297
- const tree = syntaxTree4(update2.state);
4424
+ const tree = syntaxTree5(update2.state);
4298
4425
  const adjustments = [];
4299
4426
  for (const tr of update2.transactions) {
4300
4427
  const event = tr.annotation(Transaction2.userEvent);
@@ -4432,14 +4559,14 @@ var getValidUrl = (str) => {
4432
4559
  };
4433
4560
 
4434
4561
  // packages/ui/react-ui-editor/src/extensions/markdown/image.ts
4435
- import { syntaxTree as syntaxTree5 } from "@codemirror/language";
4436
- import { StateField as StateField8 } from "@codemirror/state";
4437
- import { Decoration as Decoration5, EditorView as EditorView16, WidgetType as WidgetType3 } from "@codemirror/view";
4562
+ import { syntaxTree as syntaxTree6 } from "@codemirror/language";
4563
+ import { StateField as StateField9 } from "@codemirror/state";
4564
+ import { Decoration as Decoration6, EditorView as EditorView17, WidgetType as WidgetType4 } from "@codemirror/view";
4438
4565
  var image = (_options = {}) => {
4439
4566
  return [
4440
- StateField8.define({
4567
+ StateField9.define({
4441
4568
  create: (state) => {
4442
- return Decoration5.set(buildDecorations(0, state.doc.length, state));
4569
+ return Decoration6.set(buildDecorations2(0, state.doc.length, state));
4443
4570
  },
4444
4571
  update: (value, tr) => {
4445
4572
  if (!tr.docChanged && !tr.selection) {
@@ -4459,10 +4586,10 @@ var image = (_options = {}) => {
4459
4586
  filterFrom: from,
4460
4587
  filterTo: to,
4461
4588
  filter: () => false,
4462
- add: buildDecorations(from, to, tr.state)
4589
+ add: buildDecorations2(from, to, tr.state)
4463
4590
  });
4464
4591
  },
4465
- provide: (field) => EditorView16.decorations.from(field)
4592
+ provide: (field) => EditorView17.decorations.from(field)
4466
4593
  })
4467
4594
  ];
4468
4595
  };
@@ -4474,10 +4601,10 @@ var preloadImage = (url) => {
4474
4601
  preloaded.add(url);
4475
4602
  }
4476
4603
  };
4477
- var buildDecorations = (from, to, state) => {
4604
+ var buildDecorations2 = (from, to, state) => {
4478
4605
  const decorations = [];
4479
4606
  const cursor = state.selection.main.head;
4480
- syntaxTree5(state).iterate({
4607
+ syntaxTree6(state).iterate({
4481
4608
  enter: (node) => {
4482
4609
  if (node.name === "Image") {
4483
4610
  const urlNode = node.node.getChild("URL");
@@ -4488,7 +4615,7 @@ var buildDecorations = (from, to, state) => {
4488
4615
  return;
4489
4616
  }
4490
4617
  preloadImage(url);
4491
- decorations.push(Decoration5.replace({
4618
+ decorations.push(Decoration6.replace({
4492
4619
  block: true,
4493
4620
  widget: new ImageWidget(url)
4494
4621
  }).range(hide2 ? node.from : node.to, node.to));
@@ -4500,7 +4627,7 @@ var buildDecorations = (from, to, state) => {
4500
4627
  });
4501
4628
  return decorations;
4502
4629
  };
4503
- var ImageWidget = class extends WidgetType3 {
4630
+ var ImageWidget = class extends WidgetType4 {
4504
4631
  constructor(_url) {
4505
4632
  super();
4506
4633
  this._url = _url;
@@ -4522,10 +4649,10 @@ var ImageWidget = class extends WidgetType3 {
4522
4649
  };
4523
4650
 
4524
4651
  // packages/ui/react-ui-editor/src/extensions/markdown/styles.ts
4525
- import { EditorView as EditorView17 } from "@codemirror/view";
4652
+ import { EditorView as EditorView18 } from "@codemirror/view";
4526
4653
  var bulletListIndentationWidth = 24;
4527
4654
  var orderedListIndentationWidth = 36;
4528
- var formattingStyles = EditorView17.theme({
4655
+ var formattingStyles = EditorView18.theme({
4529
4656
  /**
4530
4657
  * Horizontal rule.
4531
4658
  */
@@ -4644,18 +4771,18 @@ var formattingStyles = EditorView17.theme({
4644
4771
  });
4645
4772
 
4646
4773
  // packages/ui/react-ui-editor/src/extensions/markdown/table.ts
4647
- import { syntaxTree as syntaxTree6 } from "@codemirror/language";
4648
- import { RangeSetBuilder as RangeSetBuilder2, StateField as StateField9 } from "@codemirror/state";
4649
- import { Decoration as Decoration6, EditorView as EditorView18, WidgetType as WidgetType4 } from "@codemirror/view";
4774
+ import { syntaxTree as syntaxTree7 } from "@codemirror/language";
4775
+ import { RangeSetBuilder as RangeSetBuilder3, StateField as StateField10 } from "@codemirror/state";
4776
+ import { Decoration as Decoration7, EditorView as EditorView19, WidgetType as WidgetType5 } from "@codemirror/view";
4650
4777
  var table = (options = {}) => {
4651
- return StateField9.define({
4778
+ return StateField10.define({
4652
4779
  create: (state) => update(state, options),
4653
4780
  update: (_, tr) => update(tr.state, options),
4654
- provide: (field) => EditorView18.decorations.from(field)
4781
+ provide: (field) => EditorView19.decorations.from(field)
4655
4782
  });
4656
4783
  };
4657
4784
  var update = (state, _options) => {
4658
- const builder = new RangeSetBuilder2();
4785
+ const builder = new RangeSetBuilder3();
4659
4786
  const cursor = state.selection.main.head;
4660
4787
  const tables = [];
4661
4788
  const getTable = () => tables[tables.length - 1];
@@ -4663,7 +4790,7 @@ var update = (state, _options) => {
4663
4790
  const table2 = getTable();
4664
4791
  return table2.rows?.[table2.rows.length - 1];
4665
4792
  };
4666
- syntaxTree6(state).iterate({
4793
+ syntaxTree7(state).iterate({
4667
4794
  enter: (node) => {
4668
4795
  switch (node.name) {
4669
4796
  case "Table": {
@@ -4696,19 +4823,19 @@ var update = (state, _options) => {
4696
4823
  tables.forEach((table2) => {
4697
4824
  const replace = state.readOnly || cursor < table2.from || cursor > table2.to;
4698
4825
  if (replace) {
4699
- builder.add(table2.from, table2.to, Decoration6.replace({
4826
+ builder.add(table2.from, table2.to, Decoration7.replace({
4700
4827
  block: true,
4701
4828
  widget: new TableWidget(table2)
4702
4829
  }));
4703
4830
  } else {
4704
- builder.add(table2.from, table2.to, Decoration6.mark({
4831
+ builder.add(table2.from, table2.to, Decoration7.mark({
4705
4832
  class: "cm-table"
4706
4833
  }));
4707
4834
  }
4708
4835
  });
4709
4836
  return builder.finish();
4710
4837
  };
4711
- var TableWidget = class extends WidgetType4 {
4838
+ var TableWidget = class extends WidgetType5 {
4712
4839
  constructor(_table) {
4713
4840
  super();
4714
4841
  this._table = _table;
@@ -4743,21 +4870,21 @@ var TableWidget = class extends WidgetType4 {
4743
4870
  };
4744
4871
 
4745
4872
  // packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts
4746
- var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts";
4873
+ var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts";
4747
4874
  var Unicode = {
4748
4875
  emDash: "\u2014",
4749
4876
  bullet: "\u2022",
4750
4877
  bulletSmall: "\u2219",
4751
4878
  bulletSquare: "\u2B1D"
4752
4879
  };
4753
- var HorizontalRuleWidget = class extends WidgetType5 {
4880
+ var HorizontalRuleWidget = class extends WidgetType6 {
4754
4881
  toDOM() {
4755
4882
  const el = document.createElement("span");
4756
4883
  el.className = "cm-hr";
4757
4884
  return el;
4758
4885
  }
4759
4886
  };
4760
- var LinkButton = class extends WidgetType5 {
4887
+ var LinkButton = class extends WidgetType6 {
4761
4888
  constructor(url, render) {
4762
4889
  super();
4763
4890
  this.url = url;
@@ -4773,7 +4900,7 @@ var LinkButton = class extends WidgetType5 {
4773
4900
  return el;
4774
4901
  }
4775
4902
  };
4776
- var CheckboxWidget = class extends WidgetType5 {
4903
+ var CheckboxWidget = class extends WidgetType6 {
4777
4904
  constructor(_checked) {
4778
4905
  super();
4779
4906
  this._checked = _checked;
@@ -4818,7 +4945,7 @@ var CheckboxWidget = class extends WidgetType5 {
4818
4945
  return false;
4819
4946
  }
4820
4947
  };
4821
- var TextWidget = class extends WidgetType5 {
4948
+ var TextWidget = class extends WidgetType6 {
4822
4949
  constructor(text, className) {
4823
4950
  super();
4824
4951
  this.text = text;
@@ -4833,29 +4960,29 @@ var TextWidget = class extends WidgetType5 {
4833
4960
  return el;
4834
4961
  }
4835
4962
  };
4836
- var hide = Decoration7.replace({});
4837
- var blockQuote = Decoration7.line({
4963
+ var hide = Decoration8.replace({});
4964
+ var blockQuote = Decoration8.line({
4838
4965
  class: mx4("cm-blockquote")
4839
4966
  });
4840
- var fencedCodeLine = Decoration7.line({
4967
+ var fencedCodeLine = Decoration8.line({
4841
4968
  class: mx4("cm-code cm-codeblock-line")
4842
4969
  });
4843
- var fencedCodeLineFirst = Decoration7.line({
4970
+ var fencedCodeLineFirst = Decoration8.line({
4844
4971
  class: mx4("cm-code cm-codeblock-line", "cm-codeblock-first")
4845
4972
  });
4846
- var fencedCodeLineLast = Decoration7.line({
4973
+ var fencedCodeLineLast = Decoration8.line({
4847
4974
  class: mx4("cm-code cm-codeblock-line", "cm-codeblock-last")
4848
4975
  });
4849
4976
  var commentBlockLine = fencedCodeLine;
4850
4977
  var commentBlockLineFirst = fencedCodeLineFirst;
4851
4978
  var commentBlockLineLast = fencedCodeLineLast;
4852
- var horizontalRule = Decoration7.replace({
4979
+ var horizontalRule = Decoration8.replace({
4853
4980
  widget: new HorizontalRuleWidget()
4854
4981
  });
4855
- var checkedTask = Decoration7.replace({
4982
+ var checkedTask = Decoration8.replace({
4856
4983
  widget: new CheckboxWidget(true)
4857
4984
  });
4858
- var uncheckedTask = Decoration7.replace({
4985
+ var uncheckedTask = Decoration8.replace({
4859
4986
  widget: new CheckboxWidget(false)
4860
4987
  });
4861
4988
  var editingRange = (state, range, focus2) => {
@@ -4870,14 +4997,14 @@ var autoHideTags = /* @__PURE__ */ new Set([
4870
4997
  "SubscriptMark",
4871
4998
  "SuperscriptMark"
4872
4999
  ]);
4873
- var buildDecorations2 = (view, options, focus2) => {
4874
- const deco = new RangeSetBuilder3();
4875
- const atomicDeco = new RangeSetBuilder3();
5000
+ var buildDecorations3 = (view, options, focus2) => {
5001
+ const deco = new RangeSetBuilder4();
5002
+ const atomicDeco = new RangeSetBuilder4();
4876
5003
  const { state } = view;
4877
5004
  const headerLevels = [];
4878
5005
  const getHeaderLevels = (node, level) => {
4879
- invariant3(level > 0, void 0, {
4880
- F: __dxlog_file8,
5006
+ invariant4(level > 0, void 0, {
5007
+ F: __dxlog_file9,
4881
5008
  L: 178,
4882
5009
  S: void 0,
4883
5010
  A: [
@@ -4915,8 +5042,8 @@ var buildDecorations2 = (view, options, focus2) => {
4915
5042
  listLevels.pop();
4916
5043
  };
4917
5044
  const getCurrentListLevel = () => {
4918
- invariant3(listLevels.length, void 0, {
4919
- F: __dxlog_file8,
5045
+ invariant4(listLevels.length, void 0, {
5046
+ F: __dxlog_file9,
4920
5047
  L: 200,
4921
5048
  S: void 0,
4922
5049
  A: [
@@ -4959,7 +5086,7 @@ var buildDecorations2 = (view, options, focus2) => {
4959
5086
  } else {
4960
5087
  const num = headers.slice(from - 1).map((level2) => level2?.number ?? 0).join(".") + " ";
4961
5088
  if (num.length) {
4962
- atomicDeco.add(mark.from, mark.from + len, Decoration7.replace({
5089
+ atomicDeco.add(mark.from, mark.from + len, Decoration8.replace({
4963
5090
  widget: new TextWidget(num, theme.heading(level))
4964
5091
  }));
4965
5092
  }
@@ -4984,7 +5111,7 @@ var buildDecorations2 = (view, options, focus2) => {
4984
5111
  if (node.from === line.to - 1) {
4985
5112
  return false;
4986
5113
  }
4987
- deco.add(line.from, line.from, Decoration7.line({
5114
+ deco.add(line.from, line.from, Decoration8.line({
4988
5115
  class: "cm-list-item",
4989
5116
  attributes: {
4990
5117
  style: `padding-left: ${offset}px; text-indent: -${width}px;`
@@ -5001,7 +5128,7 @@ var buildDecorations2 = (view, options, focus2) => {
5001
5128
  const label = list.type === "OrderedList" ? `${++list.number}.` : Unicode.bulletSmall;
5002
5129
  const line = state.doc.lineAt(node.from);
5003
5130
  const to = state.doc.sliceString(node.to, node.to + 1) === " " ? node.to + 1 : node.to;
5004
- atomicDeco.add(line.from, to, Decoration7.replace({
5131
+ atomicDeco.add(line.from, to, Decoration8.replace({
5005
5132
  widget: new TextWidget(label, list.type === "OrderedList" ? "cm-list-mark cm-list-mark-ordered" : "cm-list-mark cm-list-mark-bullet")
5006
5133
  }));
5007
5134
  break;
@@ -5088,7 +5215,7 @@ var buildDecorations2 = (view, options, focus2) => {
5088
5215
  if (!editing) {
5089
5216
  atomicDeco.add(node.from, marks[0].to, hide);
5090
5217
  }
5091
- deco.add(marks[0].to, marks[1].from, Decoration7.mark({
5218
+ deco.add(marks[0].to, marks[1].from, Decoration8.mark({
5092
5219
  tagName: "a",
5093
5220
  attributes: {
5094
5221
  class: "cm-link",
@@ -5098,7 +5225,7 @@ var buildDecorations2 = (view, options, focus2) => {
5098
5225
  }
5099
5226
  }));
5100
5227
  if (!editing) {
5101
- atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ? Decoration7.replace({
5228
+ atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ? Decoration8.replace({
5102
5229
  widget: new LinkButton(url, options.renderLinkButton)
5103
5230
  }) : hide);
5104
5231
  }
@@ -5132,7 +5259,7 @@ var buildDecorations2 = (view, options, focus2) => {
5132
5259
  }
5133
5260
  }
5134
5261
  };
5135
- const tree = syntaxTree7(state);
5262
+ const tree = syntaxTree8(state);
5136
5263
  if (options.numberedHeadings?.from === void 0) {
5137
5264
  for (const { from, to } of view.visibleRanges) {
5138
5265
  tree.iterate({
@@ -5156,13 +5283,13 @@ var buildDecorations2 = (view, options, focus2) => {
5156
5283
  var forceUpdate = StateEffect5.define();
5157
5284
  var decorateMarkdown = (options = {}) => {
5158
5285
  return [
5159
- ViewPlugin6.fromClass(class {
5286
+ ViewPlugin7.fromClass(class {
5160
5287
  constructor(view) {
5161
- ({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations2(view, options, view.hasFocus));
5288
+ ({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations3(view, options, view.hasFocus));
5162
5289
  }
5163
5290
  update(update2) {
5164
5291
  if (update2.docChanged || update2.viewportChanged || update2.focusChanged || update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(forceUpdate))) || update2.selectionSet && !options.selectionChangeDelay) {
5165
- ({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations2(update2.view, options, update2.view.hasFocus));
5292
+ ({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations3(update2.view, options, update2.view.hasFocus));
5166
5293
  this.clearUpdate();
5167
5294
  } else if (update2.selectionSet) {
5168
5295
  this.scheduleUpdate(update2.view);
@@ -5188,9 +5315,9 @@ var decorateMarkdown = (options = {}) => {
5188
5315
  }
5189
5316
  }, {
5190
5317
  provide: (plugin) => [
5191
- EditorView19.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration7.none),
5192
- EditorView19.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration7.none),
5193
- EditorView19.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration7.none)
5318
+ EditorView20.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration8.none),
5319
+ EditorView20.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration8.none),
5320
+ EditorView20.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration8.none)
5194
5321
  ]
5195
5322
  }),
5196
5323
  image(),
@@ -5201,12 +5328,12 @@ var decorateMarkdown = (options = {}) => {
5201
5328
  };
5202
5329
 
5203
5330
  // packages/ui/react-ui-editor/src/extensions/markdown/link.ts
5204
- import { syntaxTree as syntaxTree8 } from "@codemirror/language";
5331
+ import { syntaxTree as syntaxTree9 } from "@codemirror/language";
5205
5332
  import { hoverTooltip as hoverTooltip2 } from "@codemirror/view";
5206
5333
  import { tooltipContent } from "@dxos/react-ui-theme";
5207
5334
  var linkTooltip = (render) => {
5208
5335
  return hoverTooltip2((view, pos, side) => {
5209
- const syntax = syntaxTree8(view.state).resolveInner(pos, side);
5336
+ const syntax = syntaxTree9(view.state).resolveInner(pos, side);
5210
5337
  let link = null;
5211
5338
  for (let i = 0, node = syntax; !link && node && i < 5; node = node.parent, i++) {
5212
5339
  link = node.name === "Link" ? node : null;
@@ -5239,7 +5366,7 @@ var linkTooltip = (render) => {
5239
5366
  // packages/ui/react-ui-editor/src/extensions/mention.ts
5240
5367
  import { autocompletion as autocompletion2 } from "@codemirror/autocomplete";
5241
5368
  import { log as log6 } from "@dxos/log";
5242
- var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/mention.ts";
5369
+ var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/mention.ts";
5243
5370
  var mention = ({ debug, onSearch }) => {
5244
5371
  return autocompletion2({
5245
5372
  // TODO(burdon): Not working.
@@ -5254,7 +5381,7 @@ var mention = ({ debug, onSearch }) => {
5254
5381
  log6.info("completion context", {
5255
5382
  context
5256
5383
  }, {
5257
- F: __dxlog_file9,
5384
+ F: __dxlog_file10,
5258
5385
  L: 27,
5259
5386
  S: void 0,
5260
5387
  C: (f, a) => f(...a)
@@ -5387,12 +5514,12 @@ var useActionHandler = (view) => {
5387
5514
 
5388
5515
  // packages/ui/react-ui-editor/src/hooks/useTextEditor.ts
5389
5516
  import { EditorState as EditorState2 } from "@codemirror/state";
5390
- import { EditorView as EditorView20 } from "@codemirror/view";
5517
+ import { EditorView as EditorView21 } from "@codemirror/view";
5391
5518
  import { useFocusableGroup } from "@fluentui/react-tabster";
5392
5519
  import { useCallback as useCallback3, useEffect as useEffect2, useMemo as useMemo4, useRef, useState } from "react";
5393
5520
  import { log as log7 } from "@dxos/log";
5394
- import { getProviderValue, isNotFalsy as isNotFalsy3 } from "@dxos/util";
5395
- var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
5521
+ import { getProviderValue, isNotFalsy as isNotFalsy4 } from "@dxos/util";
5522
+ var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
5396
5523
  var instanceCount = 0;
5397
5524
  var useTextEditor = (props = {}, deps = []) => {
5398
5525
  const { id, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = useMemo4(() => getProviderValue(props), deps ?? []);
@@ -5407,7 +5534,7 @@ var useTextEditor = (props = {}, deps = []) => {
5407
5534
  instanceId,
5408
5535
  doc: initialValue?.length ?? 0
5409
5536
  }, {
5410
- F: __dxlog_file10,
5537
+ F: __dxlog_file11,
5411
5538
  L: 75,
5412
5539
  S: void 0,
5413
5540
  C: (f, a) => f(...a)
@@ -5431,20 +5558,20 @@ var useTextEditor = (props = {}, deps = []) => {
5431
5558
  id && documentId.of(id),
5432
5559
  extensions,
5433
5560
  // NOTE: This doesn't catch errors in keymap functions.
5434
- EditorView20.exceptionSink.of((err) => {
5561
+ EditorView21.exceptionSink.of((err) => {
5435
5562
  log7.catch(err, void 0, {
5436
- F: __dxlog_file10,
5563
+ F: __dxlog_file11,
5437
5564
  L: 97,
5438
5565
  S: void 0,
5439
5566
  C: (f, a) => f(...a)
5440
5567
  });
5441
5568
  })
5442
- ].filter(isNotFalsy3)
5569
+ ].filter(isNotFalsy4)
5443
5570
  });
5444
- view2 = new EditorView20({
5571
+ view2 = new EditorView21({
5445
5572
  parent: parentRef.current,
5446
5573
  state,
5447
- scrollTo: scrollTo ? EditorView20.scrollIntoView(scrollTo, {
5574
+ scrollTo: scrollTo ? EditorView21.scrollIntoView(scrollTo, {
5448
5575
  yMargin: 96
5449
5576
  }) : void 0,
5450
5577
  dispatchTransactions: debug ? debugDispatcher : void 0
@@ -5465,7 +5592,7 @@ var useTextEditor = (props = {}, deps = []) => {
5465
5592
  log7("destroy", {
5466
5593
  id
5467
5594
  }, {
5468
- F: __dxlog_file10,
5595
+ F: __dxlog_file11,
5469
5596
  L: 134,
5470
5597
  S: void 0,
5471
5598
  C: (f, a) => f(...a)
@@ -5482,7 +5609,7 @@ var useTextEditor = (props = {}, deps = []) => {
5482
5609
  scrollTo,
5483
5610
  selection
5484
5611
  }, {
5485
- F: __dxlog_file10,
5612
+ F: __dxlog_file11,
5486
5613
  L: 143,
5487
5614
  S: void 0,
5488
5615
  C: (f, a) => f(...a)
@@ -5543,7 +5670,7 @@ export {
5543
5670
  EditorInputModes,
5544
5671
  EditorState3 as EditorState,
5545
5672
  EditorToolbar,
5546
- EditorView21 as EditorView,
5673
+ EditorView22 as EditorView,
5547
5674
  EditorViewMode,
5548
5675
  EditorViewModes,
5549
5676
  Inline,
@@ -5574,6 +5701,7 @@ export {
5574
5701
  createDataExtensions,
5575
5702
  createEditorAction,
5576
5703
  createEditorActionGroup,
5704
+ createEditorStateStore,
5577
5705
  createEditorStateTransaction,
5578
5706
  createElement,
5579
5707
  createExternalCommentSync,
@@ -5628,7 +5756,7 @@ export {
5628
5756
  setStyle,
5629
5757
  singleValueFacet,
5630
5758
  stackItemContentEditorClassNames,
5631
- stackItemContentToolbarClassNames,
5759
+ stackItemContentToolbarClassNames2 as stackItemContentToolbarClassNames,
5632
5760
  table,
5633
5761
  tags2 as tags,
5634
5762
  textRange,